package info.u250.c2d.tests.mesh;

import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import info.u250.c2d.engine.Engine;
import info.u250.c2d.engine.EngineDrive;
import info.u250.c2d.engine.Scene;
import info.u250.c2d.engine.resources.AliasResourceManager;
import info.u250.c2d.graphic.surfaces.SurfaceData;
import info.u250.c2d.graphic.surfaces.TriangleSurfaces;


public class SurfaceTest extends Engine {
    @Override
    protected EngineDrive onSetupEngineDrive() {
        return new EngineX();
    }

    @Override
    public void dispose() {
        super.dispose();
    }

    private class EngineX implements EngineDrive {
        @Override
        public void onResourcesRegister(AliasResourceManager<String> reg) {
            reg.texture("Texture", "data/textures/default.png");
        }

        @Override
        public void dispose() {
        }

        @Override
        public EngineOptions onSetupEngine() {
            final EngineOptions opt = new EngineOptions(new String[]{
                    "data/textures/default.png"
            }, 800, 480);
            return opt;
        }

        @Override
        public void onLoadedResourcesCompleted() {
            final SurfaceData data = new SurfaceData();
            data.primitiveType = GL20.GL_TRIANGLE_STRIP;
            data.texture = "Texture";
            data.points = new Array<Vector2>() {{
                add(new Vector2(-27.005554f, 87.99661f));
                add(new Vector2(-20, -4));
                add(new Vector2(119, 125));
                add(new Vector2(200.99362f, -14.00885f));
                add(new Vector2(293.00104f, 131.99255f));
                add(new Vector2(356.99304f, -9.0069275f));
                add(new Vector2(360.9969f, 131.99257f));
                add(new Vector2(458.9926f, -9.006897f));
                add(new Vector2(510.99628f, 125.992584f));
                add(new Vector2(556.0f, -7f));
                add(new Vector2(693.0f, 92.0f));
                add(new Vector2(685.0f, -53.0f));
                add(new Vector2(766.00696f, 54.990906f));
                add(new Vector2(813.0028f, 0));
            }};
            final TriangleSurfaces surface = new TriangleSurfaces(data);
            Engine.setMainScene(new Scene() {
                @Override
                public void render(float delta) {
                    surface.render(delta);

                    Engine.debugInfo("Surface! can be physicalable");
                }

                @Override
                public InputProcessor getInputProcessor() {
                    return null;
                }

                @Override
                public void update(float delta) {
                }

                @Override
                public void hide() {
                }

                @Override
                public void show() {
                }
            });
        }
    }
}
